﻿#region Header
// ------------------------ Licence / Copyright ------------------------
// 
// ScrumTable for Scrum Meeting Support
// Copyright © HSR - Hochschule für Technik Rapperswil
// All Rights Reserved
// 
// Author:
//  Michael Gfeller Silvan Gehrig Patrick Boos
// 
// ---------------------------------------------------------------------
#endregion

#region Usings

using System;
using System.Collections;
using ScrumTable.Common;
using ScrumTable.Common.Collections;
using ScrumTable.Common.Data;
using ScrumTable.DL.Data.Common;
using System.Collections.Generic;
using ScrumTable.DL.Data.Schema;

#endregion

namespace ScrumTable.BL.DM.DataManagement
{
    /// <summary>
    /// This interface contains the meta data of the corresponding data
    /// object field.
    /// </summary>
    public interface IDomainMeta
    {
        #region Properties
        //--------------------------------------------------------------------
        // Properties
        //--------------------------------------------------------------------

        /// <summary>
        /// Gets the name of the current domain object. In most cases this
        /// property will contain the domain object title.
        /// </summary>
        string Name { get; }

        /// <summary>
        /// Gets a human readable name of the current meta object.
        /// </summary>
        string DisplayName { get; }

        /// <summary>
        /// Gets an enumerable object which can be used to loop through the
        /// allowed values.
        /// </summary>
        IEnumerable AllowedValues { get; }

        /// <summary>
        /// Gets the default value of the field.
        /// </summary>
        object DefaultValue { get; }

        /// <summary>
        /// Gets the back end field value type as .net runtime Type.
        /// </summary>
        Type FieldType { get; }

        /// <summary>
        /// Gets the default value of the field.
        /// </summary>
        DataType FieldTypeFormat { get; }


        /// <summary>
        /// Gets an enumerable object which can be used to loop through the
        /// suggested values. If AllowedValues has been set you will receive
        /// the AllowedValues enumerable instance, otherwise an enumerable
        /// with the suggestions.
        /// </summary>
        IEnumerable SuggestedValues {get ;}

        #endregion
    }
}